package com.cskaoyan.mapper;

import com.cskaoyan.bean.Account;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 创建日期: 2022/08/02 16:48
 *
 * @author ciggar
 */
public interface AccountMapper {

    // where
    Account selectAccountById(@Param("id") Integer id);


    // if
    // 假如传入的钱大于1000，那么查询存款比1000多的人
    // select * from account where money > 1000
    // 假如传入的钱小于或等于1000，那么查询存款比1000少或者等于1000的人
    // select * from account where money <= 1000
    List<Account> selectAccountListByMoney(@Param("money") Integer money);


    // where if配合使用
    // 传入一个Account对象, 根据这个Account对象去查询
    // 假如Account中的id有值，那么根据id来查询
    // 假如Account中name有值，那么根据name来查询
    // 假如Account中的money有值，那么根据money来查询
    // 假如 name和money都有值，那么根据这两个条件来查询
    // ...
    // 根据多个条件来查询的时候，条件使用or拼接
    List<Account> selectAccountListByAccount(@Param("account") Account account);


    // choose when otherwise

    // 当传入的money > 1000的时候，查询存款比1000多的人
    // 否则，查询存款比1000少或者是等于1000的人
    List<Account> selectAccountListByMoneyUseChooseWhenOtherwise(@Param("money") Integer money);


    // 修改指定的account记录
    // 通过account中的id来修改
    // 假如name有值的时候，修改name
    // 假如money有值的时候，修改money
    // 假如他们都有值，那么都需要修改
    int updateAccountByAccountSelective(@Param("account") Account account);


    // foreach


    // 批量插入
    int insertAccountListWithParam(@Param("accountList") List<Account> accountList);

    int insertAccountListWithOutParam(List<Account> accountList);

    int insertAccountArrayWithParam(@Param("accounts") Account[] accounts);

    int insertAccountArrayWithOutParam(Account[] accounts);


    // in 查询
    List<Account> selectAccountListByIds(@Param("ids") List<Integer> ids);


    // selectKey
    int insertAccountWithReturnId(@Param("account") Account account);


    int insertAccountUseGeneratedKeys(Account account);
}
